یکی دیگر از روش های نمایش اعداد اعشاری در زبان ماشینFixed Point است. در این روش عدد را به صورت X.Yنمایش می دهند. که برای مثال X قسمت صحیح عدد بوده و در 8 بیت پر ارزش یک عدد 16 بیتی و Y قسمت اعشار و در 8 بیت کم ارزش آن قرار داده و محاسبات را به وسیله آن انجام می دهند.
ضرب دو عدد به صورتFixed Point :
برای ضرب دو عدد به صورت Fixed Pointباید دو عدد را طوری در هم ضرب کنیم که معادل هگز قسمت صحیح عدد به دهدهی در قسمت صحیح عدد نتیجه و معادل هگز قسمت اعشاری به دهدهی در قسمت اعشاری عدد نتیجه قرار گیرد.
کد برنامه :
PAGE 110,100
TITLE 'MUL_FIXED_POINT.ASM' add two ASCII
;-----------------------------------------------
; Defining segment of program
; ---------------------------
CODESG SEGMENT
ASSUME SS:CODESG,DS:CODESG,CS:CODESG
ORG 100H
START: JMP MAIN ;1-Jump over data
;
; 1- Define data
; --------------
A DW ? ;FIRST VALUE
B DW ? ;SECOND VALUE
R DD ?,? ;RESULT -->EXAMPLE: 365.912 BIT:0->32= 912 , BIT:32->64= 365
NA DD ?
NB DD ?
A_BCD DB 6 DUP(?)
B_BCD DB 6 DUP(?)
R_BCD DB 12 DUP(?)
ALEFT DB 0FFH
ARIGHT DB 0FFH
BLEFT DB 0EEH
BRIGHT DB 0EEH
COUNTA DB 0
COUNTB DB 0
COUNTR DB ?
DIVT DD ?,?
;
; 2- The rest of instructions
; ---------------------------
MAIN PROC NEAR
;
MOV AL,ARIGHT
MOV BYTE PTR A,AL
MOV AL,ALEFT
MOV BYTE PTR A+1,AL
MOV AL,BRIGHT
MOV BYTE PTR B,AL
MOV AL,BLEFT
MOV BYTE PTR B+1,AL
;
;////////////////////////////////////////////////////////////
;CONVERT INTERED VALUES TO BCD &COMPUTATION NUMBER OF DECIMAL PLACES IN A&B
MOV AL,BYTE PTR A
MOV AH,0
MOV CL,10
LEA SI,A_BCD
;
FORA:
MOV AH,0
DIV CL
INC COUNTA
MOV [SI],AH
INC SI
CMP AL,0
JA FORA
;
MOV AL,BYTE PTR A+1
MOV AH,0
;
FORA2:
MOV AH,0
DIV CL
MOV [SI],AH
INC SI
CMP AL,0
JA FORA2
;
MOV AL,BYTE PTR B
MOV AH,0
LEA SI,B_BCD
;
FORB:
MOV AH,0
DIV CL
INC COUNTB
MOV [SI],AH
INC SI
CMP AL,0
JA FORB
;
MOV AL,BYTE PTR B+1
MOV AH,0
FORB2:
MOV AH,0
DIV CL
MOV [SI],AH
INC SI
CMP AL,0
JA FORB2
;//////////////////////////////////////////////////////////////
;CONVERT A TO CORRECT FORM
MOV AL,A_BCD
CBW
MOV NA,AX
MOV AL,A_BCD+1
CBW
MOV BX,10
MUL BX
ADD NA,AX
MOV AL,A_BCD+2
CBW
MOV BX,100
MUL BX
ADD NA,AX
MOV AL,A_BCD+3
CBW
MOV BX,1000
MUL BX
ADD NA,AX
MOV AL,A_BCD+4
CBW
MOV BX,10000
MUL BX
ADD NA,AX
;/////////////
MOV AL,A_BCD+5
CBW
MOV BX,86A0H
MUL BX
ADD NA,AX
MOV NA+2,DX
MOV AL,A_BCD+5
CBW
MOV BX,1H
MUL BX
CLC
ADD NA+2,AX
ADC NA+4,DX
;/////////////
;//////////////////////////////////////////////////////////////
;CONVERT B TO CORRECT FORM
;
MOV AX,4C00H ;8- End of
INT 21H ;9- processing
MAIN ENDP ; End of procedure
CODESG ENDS ; End of segment
END START ; End of program
;By : Mojtaba Alizadeh Mojia91@yahoo.com
علاقه مندی ها (Bookmarks)